
const RadixTable = (radix) => {
    if(radix > 64) {
        return false;
    }
    const TABLE = [
        '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
        'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
        'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',
        'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D',
        'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N',
        '0', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
        'Y', 'Z', '+', '/'
    ];
    return TABLE.slice(0, radix);
}
// 10进制转radix进制
 export function BaseConversion(num, radix, accuracy = 8) {
    const _table = RadixTable(radix);
    if(radix % 1 !== 0) {
        throw 'radix must be integer!';
    }
    if(!_table) {
        throw 'radix is too big!';
    }
    let _symbol = num < 0 ? '-': ''
    num = Math.abs(num);
    // 结果存储 result[0] 整数部分，result[1] 小数部分 
    const result = ['', ''];
    // 整数部分 进制处理
    let trunc = num | 0;
    while(trunc !== 0) {
        result[0] = _table[trunc % radix] + result[0];
        trunc = trunc / radix | 0;
    }
    // 小数部分 进制处理
    if(num % 1 !== 0) {
        let fract = Number('0.' + (num+'').split('.')[1]);
        while(result[1].length < accuracy && fract !== 0) {
            fract *= radix;
            result[1] += _table[(fract|0)];
            fract -= fract | 0;
        }
    }

    return result[1] ? `${result[0] || '0'}.${result[1]}`: result[0];
}